<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function fn() {
            var a = 0;
            console.log(a);
            return function(b) {
                console.log(b + a++);
                console.log('a=' + a);
            }
        }
        var f1 = fn();
        f1(5); // 5 a = 1
        var f2 = fn();
        f2(5); // 5 a = 1
        f2(5); // 6 a = 2
        f1(5); // 6 a = 2
        //我认为：
        //每当fn函数执行之后都会开辟一个新的空间来执行fn内部的代码，只不过返回的是另一个新函数,被f1、f2接收,又因为这个新的函数中用到了a也就是
        //fn执行时临时产生的空间里面的a(这个a并不是fn所指向的函数中的a)，导致这个临时生成的函数没有消失(闭包)
        //所以f1里面的a与f2里面的a是两个完全不同的a，当然也不是fn里面的a
    </script>
</body>

</html>